package com.example.mybatis.handler.result;

import com.example.mybatis.exception.MybatisException;

import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;

public class MapResultTypeHandler   extends AbstractResultTypeHandler  {
    /**
     * 静态内部类
     *
     * @since 0.0.10
     */
    private  static  class Holder{
        private static final MapResultTypeHandler INSTANCE = new MapResultTypeHandler();
    }
    /**
     * @return 实现
     * @since 0.0.10
     */
    public static MapResultTypeHandler getInstance(){
        return  Holder.INSTANCE;
    }
    @Override
    protected Object doBuildResult(ResultHandlerContext context) {
     try {
         Map<String,Object>   resultMap = new HashMap<>();
         //基本信息
         final ResultSet resultSet = context.resultSet();
         final ResultSetMetaData metaData = resultSet.getMetaData();
         //为空直接返回，大于1则报错
         //列数的总和
         int columnCount = metaData.getColumnCount();
         for (int i =1;i<=columnCount;i++){

             String columnName = metaData.getColumnName(i);
             //TODO: 这里如果给字段起别名，获取到的是原始的字段名称
             Object value  =    resultSet.getObject(columnName);
              resultMap.put(columnName,value);
         }
         //返回设置值后的结果
         return  resultMap;
     }catch (SQLException ex){
            throw  new MybatisException(ex);
     }
    }
}
